package com.ygqh.baby.service;

import com.foxinmy.weixin4j.mp.message.TemplateMessage;
import com.ygqh.baby.ao.Message;
import com.ygqh.baby.ao.WxMessageType;
import com.ygqh.baby.po.YgOrder;
import com.ygqh.baby.service.wechat.message.YgTemplateMessage;
import com.ygqh.baby.service.wechat.model.SmallTemplateMsg;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

public interface WxSmallMessageService {

    Message sendWaitingPay(YgOrder order, String samllOpenId);

    /**
     * 小程序发送模板消息
     *
     * @param tplMessage
     * @return
     */
    Message sendTmplMsg(YgTemplateMessage tplMessage);

    <T extends TemplateMessage> Message sendSmallTemplateMessage(T t);

    /**
     * 发送拼团待成团提醒
     *
     * @param title       消息头
     * @param productName 拼团商品
     * @param lastAmount  剩余数量
     * @param endTime     拼团结束时间
     * @param prompt      温馨提示
     * @param page        跳转页面
     * @param userId
     * @return Message    返回类型
     * @throws
     * @Title: sendGroupOrderRemindMsg
     * @author （guohao）
     * @date 2018年5月4日 下午4:35:51
     * @version V1.0
     */
    Message sendGroupOrderRemindMsg(String title, String productName, Long lastAmount, Date endTime, String prompt, Long orderId, String formId,
                                    String page, Long userId);

    Message sendGroupOrderRemindMsg(String title, String productName, Long lastAmount, Date endTime, String prompt, Long orderId, String formId,
                                    String page, String openId);

    /**
     * 礼品领取成功通知
     *
     * @param title       消息头
     * @param productName 礼品名称
     * @param receiveTime 领取时间
     * @param receiver    领取人
     * @param formId
     * @param url         跳转页面
     * @param openId
     * @return
     */
    Message sendGiftReceiveSuccessMsg(String title, String productName, Date receiveTime, String receiver, String formId,
                                      String url, String openId);

    /**
     * 订单支付成功后 发送群邀请通知
     *
     * @param formId 小程序formid
     * @param url    链接地址
     * @param openId 用户openid
     * @return Message
     */
    Message sendQunMsg(String formId, String url, String reamrk, String openId);

    List<SmallTemplateMsg> getSmallMsgList();

    List<SmallTemplateMsg> getSmallMsgList(String platformNo);

    /**
     * 发送订单待支付通知
     *
     * @param order
     * @return
     */
    Message sendWaitingPayMessage(YgOrder order);

    /**
     * 发送订单支付成功通知
     *
     * @param order
     * @param formId
     * @return
     */
    Message sendOrderPaySuccessMsg(YgOrder order, String formId);

    void sendOrderPaySuccessMsgAsync(YgOrder order, String formId);

    /**
     * 组装订单发货通知
     *
     * @param order
     * @param logisticsName
     * @param logisticsNo
     * @return
     */
    YgTemplateMessage getOrderSendMsgByPlatform(YgOrder order, String logisticsName, String logisticsNo);

    /**
     * 发送团购订单未完成通知
     *
     * @param productName
     * @param lastAmount
     * @param completeTime
     * @param orderId
     * @param formId
     * @param userId
     * @param platformNo
     * @return
     */
    Message sendGroupOrderRemindMsg(String productName, Long lastAmount, Date completeTime, Long orderId,
                                    String formId, Long userId, String platformNo);

    /**
     * 组装团购订单完成通知
     *
     * @param userId
     * @param orderId
     * @param productName
     * @param orderPrice
     * @param platformNo
     * @param completeTime
     * @return
     */
    YgTemplateMessage getGroupOrderSuccessSmallMsg(Long userId, Long orderId, String productName,
                                                   BigDecimal orderPrice, String platformNo, Date completeTime);

    /**
     * 退款通知
     *
     * @param returnCode
     * @param refundPrice
     * @param returnReason
     * @param userId
     * @param platformNo
     * @param formId
     * @return
     */
    Message sendReturnMoneyMsg(String returnCode, BigDecimal refundPrice, String returnReason, Long userId,
                               String platformNo, String formId);

    /**
     * 收益到账提醒
     *
     * @param userId
     * @param platformNo
     * @param incomePayPrice
     * @param orderId
     * @param orderPrice
     * @return
     */
    Message sendIncomeReceiptMsg(Long userId, String platformNo, BigDecimal incomePayPrice, String orderId,
                                 BigDecimal orderPrice);

    /**
     * 邀请成功通知
     *
     * @param userId
     * @param platformNo
     * @param recommendNickName
     * @param recommendTime
     * @return
     */
    Message sendInviteUserSuccessMsg(Long userId, String platformNo, String recommendNickName, Date recommendTime);

    Message sendTempMessage(WxMessageType messageType, String openId, String url, String... keyword);
}
